/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rmidevmediateste;

import java.rmi.Naming;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;

/**
 *
 * @author 710933
 */
public class ServidorImpl implements  InterfaceComunicacaoRMI{

   ArrayList<ClienteImpl> conectados = new ArrayList<ClienteImpl>();
  public static void main (String[] args) {
        try {
            ServidorImpl s = new ServidorImpl();

            InterfaceComunicacaoRMI localinterface = (InterfaceComunicacaoRMI) UnicastRemoteObject.exportObject(s, 0);


            //Registry registry = LocateRegistry.getRegistry();
            Registry registry = LocateRegistry.createRegistry(1098);

            registry.bind("Servidor",(Remote)localinterface);
        System.out.println("Servidor RMI Subiu");


//
//            ServidorChat s = new ServidorImpl();
//            Naming.rebind("Hello",s);
//            System.out.println("Servidor Subiu!");

        	// Se porta ja estiver sendo  usada, a exception sera disparada
            }catch (RemoteException r){
                    System.out.println("Exception remote no servidor impl!");
            }
        catch (Exception e) {
                    System.out.println ("Erro no servidorImpl: " + e.getMessage());
            }
    }

   public String conectar (InterfaceComunicacaoRMI c) throws RemoteException {

       if (c instanceof ClienteImpl){
           ClienteImpl cliente = (ClienteImpl) c;
           System.out.println("Entrou no instanceof if");
            conectados.add((ClienteImpl) cliente);
        enviar("Usuario Conectado!");
        return("Usuario Conectado");
       }

       return "Não ha cliente a conectar";
       
    }

    public void desconectar (InterfaceComunicacaoRMI c) throws RemoteException {
        conectados.remove(c);
    }

    public void enviar (String mensagem) throws RemoteException {

        System.out.println("Entrou no enviar: Tamanho do size:" + conectados.size());
        int i = 0;
    do {
        System.out.println("Entrou no enviar");
        ClienteImpl c = conectados.get(i);
        c.exibir(mensagem);
        i++;
    } while (i < conectados.size());
}

public void exibir(String s){

    System.out.println("Exibicao no servidor: "+s);
}


}

